home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #23 (1994-02-10)(Diesel)(DE)[WB].zip / Purity #23 (1994-02-10)(Diesel)(DE)[WB].adf / OS_2_Beispiele / OS_Kurs1.p < prev    next >
Text File  |  1994-01-20  |  7KB  |  181 lines

  1. PROGRAM OS_Zwei_Beispiel;
  2.  
  3. { Beispiel zur GadTools-Library.    }
  4. { ©1993 by Björn Schotte - FREEWARE }
  5.  
  6. USES Intuition, Graphics, GadTools;
  7.  
  8. TYPE
  9.   feld = ARRAY[1..10] OF TagItem;
  10.  
  11. VAR
  12.   ps                      : p_Screen;       (* Default Public-Screen *)
  13.   wp                      : p_Window;       (* Unser Fenster *)
  14.   t                       : feld;           (* TagItem-Struktur *)
  15.   msg                     : p_IntuiMessage; (* IntuiMessage (wie b. OS1.3) *)
  16.   ydiff,xdiff             : INTEGER;        (* Für Fontsensitive Positionierung *)
  17.   vi                      : PTR;            (* Visual Info *)
  18.   gad,gl,StrGad,CheckGad,
  19.   CheckGad1,OkGad         : p_Gadget;       (* Unsere Gadget-Zeiger *)
  20.   ng                      : NewGadget;      (* Record zum Ausfüllen *)
  21.   ok                      : BOOLEAN;        (* Dummy-Variable *)
  22.   buf                     : STRING[80];     (* Buffer f. Stringgadget *)
  23.   KlickG                  : p_Gadget;       (* Angeklicktes Gadget *)
  24.   GadNum                  : CARDINAL;       (* Gadgetnummer *)
  25.   class                   : LONG;           (* Klasse der Message *)
  26.   code                    : WORD;           (* Kode der Message *)
  27.   err                     : LONGINT;        (* Zur Textausgabe *)
  28.   StrInf                  : p_StringInfo;   (* StringInfo unseres Gadgets *)
  29.  
  30. BEGIN
  31.   { Buffer initialisieren }
  32.   buf := "Bitte etwas eingeben !!";
  33.   { Default PublicScreen locken (i.d.R. der Workbench Screen) }
  34.   ps := LockPubScreen(NIL);
  35.   { Haben wir keinen PublicScreen locken können ... }
  36.   IF ps = NIL THEN Error("Can`t lock Public Screen !!");
  37.   { VisualInfo holen, sonst keine GadTools-Gadgets ... }
  38.   vi := GetVisualInfoA(ps,NIL);
  39.   IF vi<>NIL THEN
  40.   BEGIN
  41.     { PublicScreen freigeben }
  42.     UnLockPubScreen(NIL,ps);
  43.     { Jaaah, wir haben VisualInfo !! }
  44.     gad := NIL;
  45.     { Speicherbereich zur Verwaltung von GadTools-Gadgets besorgen }
  46.     gad := CreateContext(^gl);
  47.     IF gad<>NIL THEN
  48.     BEGIN
  49.       { Kontext eingerichtet, es kann losgehen !! }
  50.       ydiff := ps^.BarHeight; { Höhe der Titelzeile }
  51.       xdiff := ps^.WBorLeft; { Breite des linken Randes }
  52.       { Fontsensitiv !! (Nur was die linke bzw. obere Ecke des
  53.         Gadgets betrifft !!                                     }
  54.       { Ausfüllen des Records (wie bei einer Gadget-Struktur: }
  55.  
  56.       ng := NewGadget(xdiff+4,ydiff+4,  (* Linke, rechte Ecke   *)
  57.                       250,15,           (* Breite, Höhe         *)
  58.                       NIL,NIL,          (* Text, TextAttr       *)
  59.                       1,0,              (* GadgetNummer, Flags  *)
  60.                       vi,NIL);          (* VisualInfo, UserData *)
  61.  
  62.       { Hinzufügen von optionalen Flags:
  63.  
  64.         GTST_MaxChars: Zeichenlänge
  65.  
  66.         GTST_String: Zeiger auf einen Puffer
  67.  
  68.         ( ^---- Wie unter OS1.3 bei StringInfo !! ) }
  69.       t[1] := TagItem(GTST_MAXCHARS, 80); { Max. 80 Zeichen }
  70.       t[2] := TagItem(GTST_String, LONG(^buf)); { Zeiger auf Buffer }
  71.       t[3].ti_Tag := TAG_DONE; { Ende der Liste markieren !! }
  72.       { StrGad erzeugen (Achtung: Keine Abfrage, ob StrGad = NIL !! }
  73.       StrGad := CreateGadgetA(STRING_KIND,gad,^ng,^t);
  74.  
  75.  
  76.       { PLACETEXT_RIGHT: Text rechts plazieren
  77.         PLACETEXT_IN   : Text innerhalb plazieren
  78.  
  79.         siehe in libraries/gadtools.h !!           }
  80.  
  81.       ng := NewGadget(xdiff+4,ydiff+34,
  82.                       27,11,
  83.                       "SUPER",NIL,
  84.                       2,PLACETEXT_RIGHT,
  85.                       vi,NIL);
  86.       t[1].ti_Tag := TAG_DONE; { Keine speziellen Tag-Zusätze }
  87.       CheckGad := CreateGadgetA(CHECKBOX_KIND,StrGad,^ng,^t);
  88.  
  89.       ng := NewGadget(xdiff+4,ydiff+46,
  90.                       27,11,
  91.                       "INFORMATIV",NIL,
  92.                       3,PLACETEXT_RIGHT,
  93.                       vi,NIL);
  94.       CheckGad1 := CreateGadgetA(CHECKBOX_KIND,CheckGad,^ng,^t);
  95.  
  96.       ng := NewGadget(xdiff+4,ydiff+60,
  97.                       200,13,
  98.                       "_BEENDEN",NIL,
  99.                       4,PLACETEXT_IN,
  100.                       vi,NIL);
  101.       { Der Buchstabe nach dem Unterstrich wird markiert. }
  102.       t[1] := TagItem(GT_UNDERSCORE, LONG("_"));
  103.       t[2].ti_Tag := TAG_END;
  104.  
  105.       OkGad := CreateGadgetA(BUTTON_KIND,CheckGad1,^ng,^t);
  106.  
  107.       { ***** Window öffnen ***** }
  108.  
  109.       { Innere Breite OHNE (!) Rand }
  110.       t[1] := TagItem(WA_InnerWidth, 350);
  111.       { Innere Höhe OHNE (!) Rand }
  112.       t[2] := TagItem(WA_InnerHeight, 150);
  113.       t[3].ti_Tag := WA_Title;
  114.       t[3].ti_Data := "GadTools-Beispiel by BOMBERSOFT";
  115.       t[4] := TagItem(WA_Flags,WFLG_ACTIVATE+WFLG_DEPTHGADGET+WFLG_CLOSEGADGET);
  116.       t[5] := TagItem(WA_IDCMP, IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_VANILLAKEY);
  117.       t[6] := TagItem(WA_Gadgets, LONG(gl));
  118.       t[7].ti_Tag := TAG_DONE;
  119.       wp := OpenWindowTagList(NIL,^t);
  120.       IF wp<>NIL THEN
  121.       BEGIN
  122.         Move(wp^.RPort,xdiff+4,ydiff+29);
  123.         err := _Text(Wp^.RPort,"Wie findest Du die Purity ?",27);
  124.         ok := FALSE;
  125.         REPEAT
  126.           { WaitPort wie unter OS1.3 }
  127.           msg := p_IntuiMessage(WaitPort(wp^.UserPort));
  128.           { GT_GetIMsg: Spezielle Funktion von GadTools für die
  129.             Gadget-Abfrage: UNBEDINGT mit GT_ReplyIMsg replyen !!!! }
  130.           msg := GT_GetIMsg(wp^.UserPort);
  131.           class := msg^.Class;
  132.           code := msg^.Code;
  133.           IF class IN [IDCMP_GADGETUP,IDCMP_GADGETDOWN] THEN
  134.           BEGIN
  135.             KlickG := msg^.IAddress;
  136.             GadNum := KlickG^.GadgetID;
  137.           END;
  138.           GT_ReplyIMsg(msg);
  139.           CASE class OF
  140.             IDCMP_CLOSEWINDOW : ok := TRUE;
  141.             IDCMP_VANILLAKEY:
  142.               CASE code OF
  143.                 66, 98 : ok := TRUE; { b, B }
  144.               ELSE END;
  145.             IDCMP_GADGETUP:
  146.               CASE GadNum OF
  147.                 4 : ok := TRUE;
  148.               ELSE END;
  149.           ELSE END;
  150.         UNTIL ok;
  151.         CloseWindow(wp);
  152.         Writeln("Ergebnis:");
  153.         Writeln;
  154.         Write("Die Purity ist SUPER: ");
  155.         IF (CheckGad^.Flags AND SELECTED)<>0 THEN Writeln("JA !!")
  156.                                               ELSE Writeln("NEIN !!");
  157.         Write("Die Purity ist INFORMATIV: ");
  158.         IF (CheckGad1^.Flags AND SELECTED)<>0 THEN Writeln("JA !!")
  159.                                               ELSE Writeln("NEIN !!");
  160.         Writeln;
  161.         StrInf := p_StringInfo(StrGad^.SpecialInfo);
  162.         buf := StrInf^.Buffer;
  163.         Writeln("Text im String-Gadget:");
  164.         Writeln(buf);
  165.       END ELSE Writeln("No Window !!");
  166.       FreeGadgets(gad); { Gadgets freigeben }
  167.     END ELSE Writeln("Couldn`t create Context !!");
  168.     FreeVisualInfo(vi); { VisualInfo freigeben }
  169.   END ELSE
  170.   BEGIN
  171.     Writeln("Couldn`t get VisualInfo !!");
  172.   END;
  173. END.
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.